const orderModel = require('../db/order')
const cartModel = require('../db/cart');
const xy = require('../utils/xy')

module.exports = {
    async create(req, resp) {
        // 接收数据
        let { eatWay, totalPrice, userId, cartIds, dishName } = req.body
        // 将购物车ids转成数组
        cartIds = cartIds.split(',')

        // 生成订单号
        let orderNo = null
        while (true) {
            // 自己生成
            orderNo = +new Date() + '' + Math.floor(Math.random(10000, 100000)) + 90000
            // 查询数据库
            let docs = await orderModel.findOne({ orderNo })
            // 判断是否查询到数据
            if (!docs) {
                // 如果查不到数据 - 说明订单号不在数据库中 - 是唯一的 - 停止循环 - 生成成功
                break
            }
        }

        // 支付状态
        let payStatus = '已支付'
        // 取餐码
        // 获取当前的时间日期对象
        let date = new Date()
        // 设置今天0点0分0秒
        date.setHours(0)
        date.setMinutes(0)
        date.setSeconds(0)
        date.setMilliseconds(0)
        // 今天0点0分0秒的时间戳
        let startTime = date.getTime()
        // 设置今天23点59分59秒
        date.setHours(23)
        date.setMinutes(59)
        date.setSeconds(59)
        date.setMilliseconds(999)
        // 今天23点59分59秒的时间戳
        let endTime = date.getTime()
        // 到数据库中查询 - 此时有多少今天的数据
        let docs = await orderModel.count({ createdAt: { $gt: startTime, $lt: endTime } })
        // 取餐码是今天的数据数量加一
        let code = docs + 1
        // 添加到数据库
        docs = await orderModel.insertMany({
            orderNo,
            payStatus,
            code,
            eatWay,
            totalPrice,
            userId,
            dishNum: cartIds.length,
            dishName,
            createdAt: +new Date()
        })

        cartIds.forEach(async id => {
            // 将当前结算的购物车数据删除掉
            await cartModel.deleteOne({ _id: id })
        })
        // 订单成功
        xy(resp, 200, '订单生成成功！')

    },
    // 获取所有订单
    async getall(req, resp) {
        let { userId } = req.params
        let docs = await orderModel.find({ userId })
        xy(resp, 200, '订单获取成功！', {
            orders: docs
        })

    }
}